// pages/activeReport/index.ts
import {fontSizeCalc, handleCode, handleErrCode} from "../../utils/util";
import {adoptActive, getCuesActivePage} from "../../service/api/api-cues-active";

const rules = [{
    name: "reward",
    rule: ["required","isAmount","range:[0.01,100]"],
    msg: ["积分不能为空","请输入数字，保留两位小数","范围0.01-100"]
}]


let toast;
Page({

    /**
     * 页面的初始数据
     */
    data: {
        searchText: "",// 搜索关键字
        currentTab: 0, // 当前选中的tab
        scrollTop: 0, // 滚动到顶部
        currentScrollTop: 0, // 当前记录的滚动
        tabs: [
            {name: "未录用"},
            {name: "已录用"},
        ],// 筛选条件
        reportList: [],// 计划列表
        access: {} as any,// 当前用户权限
        currentUser: {},// 当前用户信息
        options: '',
        clickLock: false,// 点击的锁
        triggered: false,// 自定义下拉是否被触发 true 表示下拉刷新已经被触发，false 表示下拉刷新未被触发
        showAdd: false,// 是否显示添加
        isAdmin: false,// 是否是管理员
        searchTimeout: null,
        current: 1,// 第几页
        pageSize: 20,// 每页多少条数据
        total: 0,// 总共有多少条

        modal: false,// 是否显示弹窗
        modalReward: '',// 弹窗输入的积分
        curReport: {},// 当前编辑的纪录
        navigateType:'other',//是否为收录库到详情
        iconSize: fontSizeCalc(40),
        tabFontSize: fontSizeCalc(28),
        labelSize: fontSizeCalc(32),
        inputSize: fontSizeCalc(32),
        btnHeight: fontSizeCalc(96) + 'rpx',
        btnLineHeight: fontSizeCalc(70) + 'rpx',
        fabWidth: fontSizeCalc(108),
        fabHeight: fontSizeCalc(108),
        fabRight: fontSizeCalc(80),
        fabBottom: fontSizeCalc(100),
        opLabelSize: fontSizeCalc(24),
        opBtnWidth: fontSizeCalc(140) + 'rpx',
        opBtnHeight: fontSizeCalc(50) + 'rpx',
        opBtnLineHeight: fontSizeCalc(20) + 'rpx',
    },

    /**
     * 生命周期函数--监听页面加载
     */
    onLoad(options) {
        const {globalData: {access, currentUser}} = getApp();
        this.setData({
            access,
            showAdd: access.线索上报x主动报送x选题列表x上报线索,
            isAdmin: access.线索上报x主动报送x配置x管理员,
            currentUser,
            options: JSON.stringify(options)
        })
        this.tabsChange({detail: {index: this.data.currentTab}});
    },
    /**
     * 开始搜索
     * @param detail
     * @param current 分页数据，
     */
    async searchFun({detail = {value: ''},current = 1}) {
        // 有传值的时候才把这个值设置进去
        let _that = this;
        let {pageSize,currentTab} = this.data;
        // if (_that.isEnd()){
        //     return
        // }
        _that.setData({
            current: current,
            searchText: detail.value
        })
        wx.showLoading({
            title: '搜索中...'
        })
        // 执行搜索函数
        await getCuesActivePage({
            current,
            pageSize,
            articleName: detail.value,
            // isAdopt: currentTab,
        }).then(async (response) => {
            _that.handleListData(response)
        }).catch(error => {
            console.warn(error)
            handleErrCode(error, 'none')
        }).finally(() => {
            // 标题栏隐藏刷新转圈圈图标
            _that.searchFinally()
        })
    },
    /**
     * 搜索取消
     */
    searchCancel() {
        console.log('chCancel');
        this.setData({
            searchText: ""
        })
        this.searchFun({})
    },
    /**
     * 切换tab
     * @param detail
     */
    tabsChange({detail = {index: 0}}) {
        this.setData({
            currentTab: detail.index,
            scrollTop: 0,
            current: 1,
            total: 0,
            searchText: ""
        })
        this.searchFun({});// 开始搜索
    },

    /**
     * 处理返回的列表值
     * @param res
     */
    handleListData(res: Object) {
        let dataList = [], total = this.data.total;
        if (res?.code === 0 && res?.data?.data) {
            const newData = res.data.data || [];
            dataList = Array.isArray(newData) && newData.map((item, index) => {
                const {typeName, bgColor} = this.handleReportType(item)
                return {
                    ...item,
                    bgColor,
                    typeName
                }
            }) || [];
            total = res.data.total || 0
        } else {
            handleErrCode(res)
        }
        const oldList = this.data.reportList
        if (this.data.current > 1){// 上拉加载更多
            dataList = [...oldList, ...dataList]
        }
        this.setData({
            reportList: dataList,
            total
        })
    },

    /**
     * 处理一下计划状态
     * @param data
     */
    handleReportType({isAdopt}) {
        return {
            typeName: isAdopt === 1 ? '已录用' : '未录用',
            bgColor: isAdopt === 1 ? '#389E0D' : '#F5A34D',
        }
    },

    /**
     * 录用与不录用
     */
    async setReportAdoptFun(params) {
        let _that = this;
        const {isSelfAdopt} = this.data.curReport;
        const tips = isSelfAdopt === 1 ? '取消录用' : '录用';
        wx.showLoading({
            title: tips + '中...'
        })
        // 执行搜索函数
        await adoptActive(params).then(async (response) => {
            handleCode(response, tips + '成功');
            setTimeout(()=>{
                _that.searchFun({});
            },1000)
        }).catch(error => {
            console.warn(error)
            handleErrCode()
        }).finally(() => {
            wx.hideLoading();
            _that.modalCancel();
        })
    },


    /**
     * 跳转到详情
     */
    gotoDetail(e: any) {
        const report = e.currentTarget.dataset.item || {};
        wx.navigateTo({
            url: `/pages/activeReportDetail/index?id=${report.id}&&type=${2}&&table=${this.data.navigateType}`,
        })
    },

    /**
     * 添加界面
     */
    addReport() {
        if (this.data.clickLock){
            return
        }
        this.setData({
            clickLock: true
        })
        let _that = this;
        wx.navigateTo({
            url: '/pages/activeReportAdd/index',
            success: function (res) {
                _that.setData({
                    clickLock: false
                })
            }
        })
    },

    /**
     * 提示语
     */
    showToast(title){
        let params = {
            title,
        }
        toast && toast.show(params);
    },
    /**
     * 显示弹窗弹窗
     */
    showModal(e:any){
        const report = e.currentTarget.dataset.item || {};
        this.setData({
            modal: true,
            curReport: report,
            modalReward: report.reward ?? (report.isAdopt === 1 ? 0 : ''),
        })
    },

    /**
     * 关闭弹窗弹窗
     */
    modalCancel(){
        this.setData({
            modal: false,
            modalReward: '',
        })
    },

    /**
     * 收录确认弹窗
     */
    modalConfirmFun(){
        const {curReport,modalReward} = this.data || {}
        let formData = {
            reward: modalReward
        };
        this.selectComponent("#form").validate(formData, rules).then(res => {
            this.setReportAdoptFun({...formData, id: curReport.id || 0})
        }).catch(errors => {
            console.log(errors)
        })
    },

    /**
     * 是否到底的判断
     */
    isEnd(){
        let {current,pageSize,total} = this.data;
        if (total && current !== 1 && current * pageSize >= total){
            this.showToast('已经到底了')
            return true
        } else {
            return false
        }
    },

    /**
     * 生命周期函数--监听页面初次渲染完成
     */
    onReady() {
        toast = this.selectComponent("#toast")
    },

    /**
     * 生命周期函数--监听页面显示
     */
    onShow() {
        wx.hideShareMenu({
            menus: ['shareAppMessage', 'shareTimeline'],// 隐藏分享到朋友和分享到朋友圈
        })
    },

    /**
     * 生命周期函数--监听页面隐藏
     */
    onHide() {

    },

    /**
     * 生命周期函数--监听页面卸载
     */
    onUnload() {
        // wx.reLaunch({
        //     url:'/pages/home/index'
        // })
    },

    /**
     * 页面相关事件处理函数--监听用户下拉动作
     */
    onPullDownRefresh() {

    },

    /**
     * scroll-view 下拉刷新
     */
    refresherPulling(){
        this.setData({
            triggered: true
        })
    },

    /**
     * 刷新函数
     */
    refreshFun(e:object, current = 1){
        // 标题栏显示刷新图标，转圈圈
        wx.showNavigationBarLoading()

        this.searchFun({current});
        clearTimeout(this.data.searchTimeout);
        let searchTimeout = setTimeout(() => {
            this.searchFinally()
        }, 2000);
        this.setData({
            searchTimeout,
        })
    },

    /**
     * 下拉加载更多数据函数
     */
    scrollToLowerFun(){
        if (this.isEnd()){
            return
        }
        // 调用刷新函数
        this.refreshFun({},this.data.current + 1)
    },

    /**
     * 页面滚动记录当前滚动的高度
     * @param e
     */
    scrollEvent(e: any) {
        this.setData({
            currentScrollTop: e.detail.scrollTop
        })
    },

    /**
     * 回到顶部
     * @param e
     */
    goTop(e: any) {
        // 这里设置 0 1取反，要动一下，不然回不去
        this.setData({
            scrollTop: Number(!this.data.scrollTop),
            currentScrollTop: 0,// 重置一下
        })
    },

    /**
     * 搜索最终
     */
    searchFinally(){
        clearTimeout(this.data.searchTimeout)
        // 标题栏隐藏刷新转圈圈图标
        wx.hideNavigationBarLoading();
        wx.stopPullDownRefresh();
        wx.hideLoading();
        this.setData({
            triggered: false
        })
    },

    /**
     * 页面上拉触底事件的处理函数
     */
    onReachBottom() {

    },

    taskExecuteShareFun() {

    },

    /**
     * 用户点击右上角分享
     */
    onShareAppMessage() {
    }
})